package com.self.shortlink.project.config;

import com.alibaba.csp.sentinel.slots.block.RuleConstant;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * 初始化限流配置
 */
@Component
public class SentinelRuleConfig implements InitializingBean {

    @Override
    public void afterPropertiesSet() throws Exception {
        // 1. 创建一个空的流量规则列表
        List<FlowRule> rules = new ArrayList<>();
        // 2. 创建一个流量规则对象
        FlowRule createOrderRule = new FlowRule();
        // 3. 设置规则的目标资源名称
        createOrderRule.setResource("create_short-link");
        // 4. 设置规则的阈值类型为QPS（每秒请求数）
        createOrderRule.setGrade(RuleConstant.FLOW_GRADE_QPS);
        // 5. 设置阈值为5，即每秒最多允许5个请求
        createOrderRule.setCount(5);
        // 6. 将规则添加到规则列表中
        rules.add(createOrderRule);
        // 7. 加载规则到Sentinel的规则管理器中
        FlowRuleManager.loadRules(rules);
    }
}
